package com.dstation.service.interf;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dstation.domain.*;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

public interface IVideoService {
    List<VideoInfo> findAllVideoInfoByExamineStatusAccess();

    boolean addVideoInfo(VideoInfo videoInfo);

    boolean addVideoTagInfo(ArrayList<TagInfo> labelInfoList, Long videoId, Timestamp timestamp);

    IPage<VideoInfo> findMyVideo(Page ipage , Long userId);

    String findVideoCoverageById(long videoId);

    String findVideoNameById(long videoId);

    boolean dropVideoInfoById(long videoId);

    VideoInfo findVideoInfoById(long videoId);

    ClassificationInfo findClassificationById(Long videoClassId);

    List<TagInfo> findTagInfoByVideoId(long videoId);

    boolean alterVideoInfo(VideoInfo videoInfo);

    boolean dropTagInfoByVideoId(Long videoId);

    VideoInfo findVideoDetailInfoById(int videoId);

    VideoLikedInfo findUserIsPraiseVideoByVideoIdAndUserId(int videoId, Long userId);

    FollowTableInfo findUserIsNoticeUp(Long followUserId, Long userId);

    List<VideoCommentInfo> findCommentInfoListByVideoId(int videoId);

    CollectionInfo findUserIsCollectVideoByUserIDAndVideoID(Long userId, int videoId);

    boolean addHistoryInfo(HistoryInfo historyInfo);

    boolean alterVideoViewNumByVideoId(int videoId);

    CoinOperatedInfo findUserIsOperatedCoinByVideoAndUserId(int videoId, Long userId);

    int findCoinNumByVideoId(long videoId);

    boolean addCoinOperatedInfo(Long userId, Long videoId);

    boolean removeCoinOperatedInfo(long userId, long videoId);

    boolean addUserPraiseVideoInfo(int videoId, Long userId, Timestamp timestamp);

    boolean dropUserPraiseVideoInfo(int videoId, Long userId);

    long findPraiseNumByVideoId(int videoId);

    boolean addUserIsNoticeUpInfo(Long followUserId, Long userId, Timestamp timestamp);

    boolean dropUserIsNoticeUpInfo(Long followUserId, Long userId);

    List<VideoInfo> findAllVideoInfoByExamineStatusAccessByUserId(Long userId);

    IPage<VideoInfo> findAllNotAccessVideoInfo(Page<VideoInfo> videoInfoPage);
}
